﻿/**
 *******************************************************************************
 *                       Continental Confidential
 *                  Copyright (c) Continental AG. 2017
 *
 *      This software is furnished under license and may be used or
 *      copied only in accordance with the terms of such license.
 *******************************************************************************
 * @file    MainWindow.h
 * @brief   应用程序主窗口类头文件
 * @note    中文注释：定义MainWindow类的接口，负责插件管理、界面布局和用户交互
 *          English: Header file for MainWindow class, responsible for plugin management, UI layout and user interaction
 *******************************************************************************
 */
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include "extensionsystem/pluginmanager.h"
#include "extensionsystem/pluginspec.h"
#include "extensionsystem/pluginerroroverview.h"
#include "extensionsystem/plugindetailsview.h"
#include <QMainWindow>
#include <QSettings>

namespace Ui {
class MainWindow;
}

/**
 * @class MainWindow
 * @brief 应用程序主窗口类
 * @details 继承自QMainWindow，是整个应用程序的核心界面组件和协调中心
 *          负责插件的加载、管理、界面集成和用户交互处理
 *          实现了插件系统与用户界面之间的桥梁功能
 */
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    /**
     * @brief 构造函数
     * @param parent 父窗口指针，默认为nullptr
     * @details 初始化UI组件、应用程序设置和插件管理器
     *          设置插件路径，加载并初始化所有插件
     *          建立信号槽连接以响应插件事件
     *          // TODO: Qt5.15.2升级 - 使用nullptr替代0作为默认参数
     */
    explicit MainWindow(QWidget *parent = 0); // TODO: Qt5.15.2升级 - 使用nullptr替代0
    
    /**
     * @brief 析构函数
     * @details 释放UI资源和应用程序设置对象
     *          确保在窗口关闭时正确清理所有资源
     */
    ~MainWindow();

Q_SIGNALS:
    /**
     * @brief 即将退出信号
     * @details 在应用程序即将退出时发射，用于通知插件管理器和其他组件进行资源清理
     *          插件可以连接到此信号以执行必要的退出前操作
     */
    void aboutToQuit();
    
public slots:
    /**
     * @brief 插件对象添加槽函数
     * @param obj 新增的插件对象指针
     * @details 当插件被成功加载并添加到系统时调用
     *          负责将插件界面集成到主窗口，并处理插件的初始化数据
     *          // TODO: Qt5.15.2升级 - PluginManager::instance()返回值管理需要调整
     */
    void pluginObjectAdded(QObject *obj);

private slots:
    /**
     * @brief 列表项双击槽函数
     * @param index 双击的列表项索引
     * @details 响应插件列表项的双击事件，切换堆叠窗口中显示的插件界面
     *          // TODO: Qt5.15.2升级 - 考虑添加边界检查确保索引有效
     */
    void on_listWidget_doubleClicked(const QModelIndex &index);

    /**
     * @brief 插件视图按钮点击槽函数
     * @details 响应工具栏上的插件视图按钮点击事件，打开插件管理对话框
     *          允许用户查看和管理已加载的插件
     *          // TODO: Qt5.15.2升级 - 使用智能指针管理对话框生命周期
     */
    void on_pluginViewBtn_clicked();

private:
    Ui::MainWindow *ui;               ///< UI界面对象指针，由uic工具自动生成
    QSettings *m_setting;             ///< 应用程序设置对象指针，用于保存和加载配置信息
    // TODO: Qt5.15.2升级 - PluginManager实例管理需改为智能指针
    ExtensionSystem::PluginManager plgManager; ///< 插件管理器实例，负责插件的加载、卸载和管理
};

#endif // MAINWINDOW_H
